import org.eclipse.paho.client.mqttv3.*;

/**
 * 发布消息的回调类  
 *
 * 必须实现MqttCallback的接口并实现对应的相关接口方法  
 *      ◦CallBack 类将实现 MqttCallBack。每个客户机标识都需要一个回调实例。在此示例中，构造函数传递客户机标识以另存为实例数据。在回调中，将它用来标识已经启动了该回调的哪个实例。  
 *  ◦必须在回调类中实现三个方法：  
 *
 *  public void messageArrived(MqttTopic topic, MqttMessage message)  
 *  接收已经预订的发布。  
 *
 *  public void connectionLost(Throwable cause)  
 *  在断开连接时调用。  
 *
 *  public void deliveryComplete(MqttDeliveryToken token))  
 *      接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。  
 *  ◦由 MqttClient.connect 激活此回调。  
 *
 */
public class PushCallback implements MqttCallback {

    public void connectionLost(Throwable cause) {
        // 连接丢失后，一般在这里面进行重连  
        System.out.println("连接断开，可以做重连");
    }

    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {

    }

    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

    }

    public void deliveryComplete(MqttDeliveryToken token) {
        // publish后会执行到这里  
        System.out.println("deliveryComplete---------"+ token.isComplete());
    }

    public void messageArrived(MqttTopic topic, MqttMessage message) throws Exception {
        // subscribe后得到的消息会执行到这里面  
        System.out.println("接收消息主题:"+topic.getName());
        System.out.println("接收消息Qos:"+message.getQos());
        System.out.println("接收消息内容:"+new String(message.getPayload()));
    }

}  